<!DOCTYPE html>
<!-- saved from url=(0041)http://c.biancheng.net/view/vip_7088.html -->
<html lang="zh-CN"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><script type="text/javascript" async="" charset="utf-8" src="./13.10Java利用对象序列化控制输入输出_files/core.php"></script>

<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- 上述3个meta标签*必须*放在最前面，任何其他内容都*必须*跟随其后！ -->
<!-- 启用Chromium高速渲染模式 -->
<meta name="renderer" content="webkit">
<meta name="force-rendering" content="webkit">
<!-- 禁止百度转码 -->
<meta name="applicable-device" content="pc,mobile">
<meta name="MobileOptimized" content="width">
<meta name="HandheldFriendly" content="true">
<meta http-equiv="Cache-Control" content="no-transform">
<meta http-equiv="Cache-Control" content="no-siteapp">
<!-- 禁止识别电话号码 -->
<meta name="format-detection" content="telephone=no">

<link rel="shortcut icon" href="http://c.biancheng.net/favicon.ico?v=1.6.72">
<link href="./13.10Java利用对象序列化控制输入输出_files/common.css" rel="stylesheet">
<title>Java利用对象序列化控制输入输出</title>
<meta name="description" content="前面学习了如何控制基本数据的输入输出，本节主要讲解如何输入输出对象数据。对象数据是很复杂的，我们可以利用对象序列化来实现。 对象序列化是什么 对象序列化（Serialize） 指">
</head>
<body>
<div id="topbar" class="clearfix">
	<ul id="product-type" class="left">
		<li>
			<a href="http://c.biancheng.net/"><span class="iconfont iconfont-home"></span>首页</a>
		</li>
		<li class="active">
			<a href="http://c.biancheng.net/sitemap/" rel="nofollow"><span class="iconfont iconfont-book"></span>教程</a>
		</li>
		<li>
			<a href="http://vip.biancheng.net/p/vip/show.php" rel="nofollow" target="_blank"><span class="iconfont iconfont-vip"></span>VIP会员</a>
		</li>
		<li>
			<a href="http://vip.biancheng.net/p/q2a/show.php" rel="nofollow" target="_blank"><span class="iconfont iconfont-q2a"></span>一对一答疑</a>
		</li>
		<li>
			<a href="http://fudao.biancheng.net/" rel="nofollow" target="_blank"><span class="iconfont iconfont-fudao"></span>辅导班</a>
		</li>
	</ul>
</div>
<div id="header" class="clearfix">
	<a id="logo" class="left" href="http://c.biancheng.net/">
		<img height="26" src="./13.10Java利用对象序列化控制输入输出_files/logo.png" alt="C语言中文网">
	</a>
	<ul id="nav-main" class="hover-none left clearfix">
		<li class="wap-yes"><a href="http://c.biancheng.net/">首页</a></li>
		<li><a href="http://c.biancheng.net/c/">C语言教程</a></li>
		<li><a href="http://c.biancheng.net/cplus/">C++教程</a></li>
		<li><a href="http://c.biancheng.net/python/">Python教程</a></li>
		<li><a href="http://c.biancheng.net/java/">Java教程</a></li>
		<li><a href="http://c.biancheng.net/linux_tutorial/">Linux入门</a></li>
		<li><a href="http://c.biancheng.net/sitemap/" title="网站地图">更多&gt;&gt;</a></li>
	</ul>
	<span id="sidebar-toggle" class="toggle-btn" toggle-target="#sidebar">目录 <span class="glyphicon"></span></span>

	<a href="http://vip.biancheng.net/?from=topbar" class="user-info glyphicon glyphicon-user hover-none" target="_blank" rel="nofollow" title="用户中心"></a>
</div>
<div id="main" class="clearfix">
	<div id="sidebar" class="toggle-target">
	<div id="contents">
		<dt><span class="glyphicon glyphicon-option-vertical" aria-hidden="true"></span><a href="http://c.biancheng.net/java/">Java教程</a></dt>
		
			<dd>
				<span class="channel-num">1</span>
				<a href="http://c.biancheng.net/java/10/">Java入门基础及环境搭建</a>
			</dd>
		
			<dd>
				<span class="channel-num">2</span>
				<a href="http://c.biancheng.net/java/20/">Java程序设计基础</a>
			</dd>
		
			<dd>
				<span class="channel-num">3</span>
				<a href="http://c.biancheng.net/java/30/">Java流程控制语句</a>
			</dd>
		
			<dd>
				<span class="channel-num">4</span>
				<a href="http://c.biancheng.net/java/40/">Java字符串处理</a>
			</dd>
		
			<dd>
				<span class="channel-num">5</span>
				<a href="http://c.biancheng.net/java/50/">Java数字和日期处理</a>
			</dd>
		
			<dd>
				<span class="channel-num">6</span>
				<a href="http://c.biancheng.net/java/60/">Java内置包装类</a>
			</dd>
		
			<dd>
				<span class="channel-num">7</span>
				<a href="http://c.biancheng.net/java/70/">Java数组处理</a>
			</dd>
		
			<dd>
				<span class="channel-num">8</span>
				<a href="http://c.biancheng.net/java/80/">Java类和对象</a>
			</dd>
		
			<dd>
				<span class="channel-num">9</span>
				<a href="http://c.biancheng.net/java/90/">Java继承和多态</a>
			</dd>
		
			<dd>
				<span class="channel-num">10</span>
				<a href="http://c.biancheng.net/java/100/">Java异常处理</a>
			</dd>
		
			<dd>
				<span class="channel-num">11</span>
				<a href="http://c.biancheng.net/java/110/">Java集合、泛型和枚举</a>
			</dd>
		
			<dd>
				<span class="channel-num">12</span>
				<a href="http://c.biancheng.net/java/120/">Java反射机制</a>
			</dd>
		<dd class="this"> <span class="channel-num">13</span> <a href="http://c.biancheng.net/java/130/">Java输入/输出流</a> </dd><dl class="dl-sub"><dd>13.1 <a href="http://c.biancheng.net/view/1119.html">Java流的概念</a></dd><dd>13.2 <a href="http://c.biancheng.net/view/1129.html">Java系统流</a></dd><dd>13.3 <a href="http://c.biancheng.net/view/6977.html">Java字符编码介绍</a></dd><dd>13.4 <a href="http://c.biancheng.net/view/1133.html">Java File类</a></dd><dd>13.5 <a href="http://c.biancheng.net/view/vip_7085.html">Java动态读取文件内容</a><span class="glyphicon glyphicon-usd"></span></dd><dd>13.6 <a href="http://c.biancheng.net/view/1144.html">Java字节流的使用</a></dd><dd>13.7 <a href="http://c.biancheng.net/view/1150.html">Java字符流的使用</a></dd><dd>13.8 <a href="http://c.biancheng.net/view/vip_7086.html">Java字节流和字符流的区别，如何区分输入流和输出流？</a><span class="glyphicon glyphicon-usd"></span></dd><dd>13.9 <a href="http://c.biancheng.net/view/6966.html">Java转换流</a></dd><dd class="active">13.10 <a href="http://c.biancheng.net/view/vip_7088.html">Java利用对象序列化控制输入输出</a><span class="glyphicon glyphicon-usd"></span></dd><dd>13.11 <a href="http://c.biancheng.net/view/1153.html">Java保存图书信息</a></dd><dd>13.12 <a href="http://c.biancheng.net/view/vip_7089.html">【Java项目实战】猜数字小游戏</a><span class="glyphicon glyphicon-usd"></span></dd></dl>
			<dd>
				<span class="channel-num">14</span>
				<a href="http://c.biancheng.net/java/java/135/">Java注解</a>
			</dd>
		
	</div>
</div>
	<div id="article-wrap">
		<div id="article">
			<div class="arc-info">
	<span class="position"><span class="glyphicon glyphicon-map-marker"></span> <a href="http://c.biancheng.net/">首页</a> &gt; <a href="http://c.biancheng.net/java/">Java教程</a> &gt; <a href="http://c.biancheng.net/java/130/">Java输入/输出流</a></span>
	<span class="read-num">阅读：2,969</span>
</div>

<div id="ad-position-bottom"></div>
			<h1>Java利用对象序列化控制输入输出</h1>
			<div class="pre-next-page clearfix">
                    <span class="pre left"><span class="icon">&lt;</span> <span class="text-brief text-brief-pre">上一页</span><a href="http://c.biancheng.net/view/6966.html">Java转换流</a></span>
                    <span class="next right"><a href="http://c.biancheng.net/view/1153.html">Java保存图书信息</a><span class="text-brief text-brief-next">下一页</span> <span class="icon">&gt;</span></span>
                </div>
			<div id="ad-arc-top"><p class="pic"></p><p class="text" adid="java-1v1q2a"><a href="http://c.biancheng.net/view/7552.html" target="_blank" style="color: #D33428;">C语言中文网推出辅导班啦，包括<span style="color: #008000;">「C语言辅导班、C++辅导班、算法/数据结构辅导班」</span>，全部都是一对一教学：一对一辅导 + 一对一答疑 + 布置作业 + 项目实践 + 永久学习。QQ在线，随时响应！</a></p></div>
			<div id="arc-body">前面学习了如何控制基本数据的输入输出，本节主要讲解如何输入输出对象数据。对象数据是很复杂的，我们可以利用对象序列化来实现。
<h2>
	对象序列化是什么</h2>
<span style="color:#008000;">对象序列化（Serialize）</span>指将一个 Java 对象写入 IO 流中，与此对应的是，对象的反序列化（Deserialize）则指从 IO 流中恢复该 Java 对象。如果想让某个 Java 对象能够序列化，则必须让它的类实现 java.io.Serializable 接口，接口定义如下：<br>
<pre class="info-box">public interface Serializable {
}</pre>
Serializable 接口是一个空接口，实现该接口无须实现任何方法，它只是告诉 JVM 该类可以被序列化机制处理。通常建议程序创建的每个 JavaBean 类都实现 Serializable。<br>
<br>
ObjectInput 接口与 ObjectOutput 接口分别继承了 DataInput 和 DataOutput&nbsp; 接口，主要提供用于读写基本数据和对象数据的方法。 ObjectInput 接口提供了 readObject() 方法，此方法用于将对象从流中读出。ObjectOutput 提供了 writeObject() 方法，此方法用于将对象写入流中。因为 ObjectInput 与 ObjectOutput 都是接口，所以不能创建对象，只能使用分别实现了这两个接口的 ObjectInputStream 类和 ObjectOutputStream 类来创建对象。<br>
<br>
下面讲解如何使用 ObjectInputStream 类和 ObjectOutputStream 类来操作数据。<br>
<h2>
	序列化</h2>
ObjectOutputStream 类继承了 OutputStream 类，同时实现了 ObjectOutput 接口，提供将对象序列化并写入流中的功能，该类的构造方法如下：
<p class="info-box">
	public ObjectOutputStream (OutputStream out)</p>
该构造方法需要传入一个 OutputStream 对象，用来表示将对象二进制流写入到指定的 OutputStream 中。&nbsp;<br>
<br>
程序通过以下两个步骤来序列化对象：<br>
<br>
1）创建一个 ObjectOutputStream 对象，如下代码所示。
<p class="info-box">
	// 创建个 ObjectOutputStream 输出流<br>
	ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("object.txt"));</p>
2）调用 ObjectOutputStream 对象的 writeObject() 方法输出可序列化对象，如下代码所示。
<p class="info-box">
	// 将一个 Person 对象输出到输出流中<br>
	oos.writerObject(per);</p>
<h4>
	例 1</h4>
下面程序定义了一个 Person 类，这个 Person 类就是一个普通的 Java 类，只是实现了 Serializable 接口，该接口表示该类的对象是可序列化的。<br>
<div class="snippet-container" style="undefined;"><div class="sh_bright snippet-wrap"><div class="snippet-menu sh_sourceCode" style="display:none;"><pre><a class="snippet-copy sh_url" href="http://c.biancheng.net/view/vip_7088.html#" style="display: none;">复制</a><a class="snippet-text sh_url" href="http://c.biancheng.net/view/vip_7088.html#">纯文本</a><a class="snippet-window sh_url" href="http://c.biancheng.net/view/vip_7088.html#">复制</a></pre></div><pre class="java sh_java snippet-formatted sh_sourceCode"><ol class="snippet-num"><li><span class="sh_preproc">import</span> java<span class="sh_symbol">.</span>io<span class="sh_symbol">.</span>Serializable<span class="sh_symbol">;</span></li><li><span style="display:none;">&nbsp;</span></li><li><span class="sh_keyword">public</span> <span class="sh_keyword">class</span><span class="sh_normal"> </span><span class="sh_classname">Person</span> <span class="sh_keyword">implements</span> Serializable <span class="sh_cbracket">{</span></li><li>    <span class="sh_keyword">private</span> <span class="sh_usertype">String</span><span class="sh_normal"> </span>name<span class="sh_symbol">;</span></li><li>    <span class="sh_keyword">private</span> <span class="sh_type">int</span> age<span class="sh_symbol">;</span></li><li><span style="display:none;">&nbsp;</span></li><li>    <span class="sh_comment">// 注意此处没有提供无参数的构造器</span></li><li>    <span class="sh_keyword">public</span> <span class="sh_function">Person</span><span class="sh_symbol">(</span><span class="sh_usertype">String</span><span class="sh_normal"> </span>name<span class="sh_symbol">,</span> <span class="sh_type">int</span> age<span class="sh_symbol">)</span> <span class="sh_cbracket">{</span></li><li>        System<span class="sh_symbol">.</span>out<span class="sh_symbol">.</span><span class="sh_function">println</span><span class="sh_symbol">(</span><span class="sh_string">"有参数的构造器"</span><span class="sh_symbol">);</span></li><li>        <span class="sh_keyword">this</span><span class="sh_symbol">.</span>name <span class="sh_symbol">=</span> name<span class="sh_symbol">;</span></li><li>        <span class="sh_keyword">this</span><span class="sh_symbol">.</span>age <span class="sh_symbol">=</span> age<span class="sh_symbol">;</span></li><li>    <span class="sh_cbracket">}</span></li><li>    <span class="sh_comment">// 省略 name 和 age的setter和getter方法</span></li><li>    <span class="sh_symbol">...</span></li><li><span class="sh_cbracket">}</span></li></ol></pre><pre class="snippet-textonly sh_sourceCode" style="display:none;">import java.io.Serializable;

public class Person implements Serializable {
    private String name;
    private int age;

    // 注意此处没有提供无参数的构造器
    public Person(String name, int age) {
        System.out.println("有参数的构造器");
        this.name = name;
        this.age = age;
    }
    // 省略 name 和 age的setter和getter方法
    ...
}</pre></div></div>
注意：Person 类的两个成员变量分别是 String 类型和 int 类型的。如果某个类的成员变量的类型不是基本类型或 String 类型，而是另一个引用类型，那么这个引用类型必须是可序列化的，否则拥有该类型成员变量的类也是不可序列化的。<br>
<br>
下面程序使用 ObjectOutputStream 将一个 Person 对象写入到磁盘文件。
<div class="snippet-container" style="undefined;"><div class="sh_bright snippet-wrap"><div class="snippet-menu sh_sourceCode" style="display:none;"><pre><a class="snippet-copy sh_url" href="http://c.biancheng.net/view/vip_7088.html#" style="display: none;">复制</a><a class="snippet-text sh_url" href="http://c.biancheng.net/view/vip_7088.html#">纯文本</a><a class="snippet-window sh_url" href="http://c.biancheng.net/view/vip_7088.html#">复制</a></pre></div><pre class="java sh_java snippet-formatted sh_sourceCode"><ol class="snippet-num"><li><span class="sh_keyword">public</span> <span class="sh_keyword">class</span><span class="sh_normal"> </span><span class="sh_classname">WriteObject</span> <span class="sh_cbracket">{</span></li><li>    <span class="sh_keyword">public</span> <span class="sh_keyword">static</span> <span class="sh_type">void</span> <span class="sh_function">main</span><span class="sh_symbol">(</span>String<span class="sh_symbol">[]</span> args<span class="sh_symbol">)</span> <span class="sh_keyword">throws</span> Exception <span class="sh_cbracket">{</span></li><li>        <span class="sh_comment">// 创建一个 ObjectOutputStream 输出流</span></li><li>        <span class="sh_usertype">ObjectOutputStream</span><span class="sh_normal"> </span>oos <span class="sh_symbol">=</span> <span class="sh_keyword">new</span> <span class="sh_function">ObjectOutputStream</span><span class="sh_symbol">(</span><span class="sh_keyword">new</span> <span class="sh_function">FileOutputStream</span><span class="sh_symbol">(</span><span class="sh_string">"object.txt"</span><span class="sh_symbol">));</span></li><li>        <span class="sh_usertype">Person</span><span class="sh_normal"> </span>per <span class="sh_symbol">=</span> <span class="sh_keyword">new</span> <span class="sh_function">Person</span><span class="sh_symbol">(</span><span class="sh_string">"C语言中文网"</span><span class="sh_symbol">,</span> <span class="sh_number">7</span><span class="sh_symbol">);</span></li><li>        <span class="sh_comment">// 将 Per对象写入输出流</span></li><li>        oos<span class="sh_symbol">.</span><span class="sh_function">writeObject</span><span class="sh_symbol">(</span>per<span class="sh_symbol">);</span></li><li>    <span class="sh_cbracket">}</span></li><li><span class="sh_cbracket">}</span></li></ol></pre><pre class="snippet-textonly sh_sourceCode" style="display:none;">public class WriteObject {
    public static void main(String[] args) throws Exception {
        // 创建一个 ObjectOutputStream 输出流
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("object.txt"));
        Person per = new Person("C语言中文网", 7);
        // 将 Per对象写入输出流
        oos.writeObject(per);
    }
}</pre></div></div>
上面程序中的第 4 行代码创建了一个 ObjectOutputStream 输出流，这个 ObjectOutputStream 输出流建立在一个文件输出流的基础之上。程序第 7 行代码使用 writeObject() 方法将一个 Person 对象写入输出流。运行上面程序，将会看到生成了一个 object.txt 文件，该文件的内容就是 Person 对象。
<h2>
	反序列化</h2>
ObjectInputStream 类继承了 InputStream 类，同时实现了 ObjectInput 接口，提供了将对象序列化并从流中读取出来的功能。该类的构造方法如下：
<p class="info-box">
	public ObjectInputStream(InputStream out)</p>
该构造方法需要传入一个 InputStream 对象，用来创建从指定 InputStream 读取的 ObjectInputStream。<br>
<br>
反序列化的步骤如下所示：<br>
<br>
1）创建一个 ObjectInputStream 输入流，这个输入流是一个处理流，所以必须建立在其他节点流的基础之上。如下代码所示。<br>
<p class="info-box">
	// 创建一个ObjectInputStream输入流<br>
	ObjectInputStream ois = new ObjectInputStream (new FileInputStream ("object. txt"));</p>
2）调用 ObjectInputStream 对象的 readObject() 方法读取流中的对象，该方法返回一个 Object 类型的 Java 对象，如果程序知道该 Java 对象的类型，则可以将该对象强制类型转换成其真实的类型。如下代码所示。<br>
<p class="info-box">
	// 从输入流中读取一个Java对象，并将其强制类型转换为Person类<br>
	Person P = (Person)ois.readObject();</p>
<h4>
	例 2</h4>
下面程序是从例 1 中生成的 object.txt 文件来读取 Person 对象的步骤。<br>
<div class="snippet-container" style="undefined;"><div class="sh_bright snippet-wrap"><div class="snippet-menu sh_sourceCode" style="display:none;"><pre><a class="snippet-copy sh_url" href="http://c.biancheng.net/view/vip_7088.html#" style="display: none;">复制</a><a class="snippet-text sh_url" href="http://c.biancheng.net/view/vip_7088.html#">纯文本</a><a class="snippet-window sh_url" href="http://c.biancheng.net/view/vip_7088.html#">复制</a></pre></div><pre class="java sh_java snippet-formatted sh_sourceCode"><ol class="snippet-num"><li><span class="sh_keyword">public</span> <span class="sh_keyword">class</span><span class="sh_normal"> </span><span class="sh_classname">ReadObject</span> <span class="sh_cbracket">{</span></li><li>    <span class="sh_keyword">public</span> <span class="sh_keyword">static</span> <span class="sh_type">void</span> <span class="sh_function">main</span><span class="sh_symbol">(</span>String<span class="sh_symbol">[]</span> args<span class="sh_symbol">)</span> <span class="sh_keyword">throws</span> Exception <span class="sh_cbracket">{</span></li><li>        <span class="sh_comment">// 创建一个ObjectInputStream输入流</span></li><li>        <span class="sh_usertype">ObjectInputStream</span><span class="sh_normal"> </span>ois <span class="sh_symbol">=</span> <span class="sh_keyword">new</span> <span class="sh_function">ObjectInputStream</span><span class="sh_symbol">(</span><span class="sh_keyword">new</span> <span class="sh_function">FileInputStream</span><span class="sh_symbol">(</span><span class="sh_string">"object.txt"</span><span class="sh_symbol">));</span></li><li>        <span class="sh_comment">// 从输入流中读取一个 Java对象，并将其强制类型转换为Person类</span></li><li>        <span class="sh_usertype">Person</span><span class="sh_normal"> </span>p <span class="sh_symbol">=</span> <span class="sh_symbol">(</span>Person<span class="sh_symbol">)</span> ois<span class="sh_symbol">.</span><span class="sh_function">readObject</span><span class="sh_symbol">();</span></li><li>        System<span class="sh_symbol">.</span>out<span class="sh_symbol">.</span><span class="sh_function">println</span><span class="sh_symbol">(</span><span class="sh_string">"名字为："</span> <span class="sh_symbol">+</span> p<span class="sh_symbol">.</span><span class="sh_function">getName</span><span class="sh_symbol">()</span> <span class="sh_symbol">+</span> <span class="sh_string">"</span><span class="sh_specialchar">\n</span><span class="sh_string">年龄为："</span> <span class="sh_symbol">+</span> p<span class="sh_symbol">.</span><span class="sh_function">getAge</span><span class="sh_symbol">());</span></li><li>    <span class="sh_cbracket">}</span></li><li><span class="sh_cbracket">}</span></li></ol></pre><pre class="snippet-textonly sh_sourceCode" style="display:none;">public class ReadObject {
    public static void main(String[] args) throws Exception {
        // 创建一个ObjectInputStream输入流
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("object.txt"));
        // 从输入流中读取一个 Java对象，并将其强制类型转换为Person类
        Person p = (Person) ois.readObject();
        System.out.println("名字为：" + p.getName() + "\n年龄为：" + p.getAge());
    }
}</pre></div></div>
上面程序中第 4 行粗体字代码将一个文件输入流包装成 ObjectInputStream 输入流，第 6 行代码使用 readObject() 读取了文件中的 Java 对象，这就完成了反序列化过程。<br>
<br>
反序列化读取的仅仅是 Java 对象的数据，而不是 Java 类，因此采用反序列化恢复 Java 对象时，必须提供该 Java 对象所属类的 class 文件，否则将会引发 ClassNotFoundException 异常。<br>
<br>
Person 类只有一个有参数的构造器，没有无参数的构造器，而且该构造器内有一个普通的打印语句。当反序列化读取 Java 对象时，并没有看到程序调用该构造器，这表明反序列化机制无须通过构造器来初始化 Java 对象。<br>
<blockquote>
	<p>
		如果使用序列化机制向文件中写入了多个 Java 对象，使用反序列化机制恢复对象时必须按实际写入的顺序读取。</p>
</blockquote>
当一个可序列化类有多个父类时（包括直接父类和间接父类），这些父类要么有无参数的构造方法，要么也是可序列化的，否则反序列化时将抛出 InvalidClassException 异常。如果父类是不可序列化的，只是带有无参数的构造方法，则该父类中定义的成员变量值不会序列化到 IO 流中。
<h2>
	Java序列化编号</h2>
Java 序列化机制是通过类的<span style="color:#008000;">序列化编号（serialVersionUID）</span>来验证版本一致性的。在反序列化时，JVM 会把传来字节流中的序列化编号和本地相应实体类的序列化编号进行比较，如果相同就认为一致，可以进行反序列化，否则会抛出 InvalidCastException 异常<br>
<br>
序列化编号有两种显式生成方式：<br>
<ol>
	<li>
		默认的1L，比如：private static final long serialVersionUID = 1L。</li>
	<li>
		根据类名、接口名、成员方法及属性等来生成一个 64 位的哈希字段。</li>
</ol>
<br>
当实现 Serializable 接口的对象没有显式定义一个序列化编号时，Java 序列化会根据编译的 Class 自动生成一个序列化编号，这种情况下只要 class 文件发生变化，序列化号就会改变，否则一直不变。</div>
			<div id="arc-append">
	<p>关注微信公众号「站长严长生」，在手机上阅读所有教程，随时随地都能学习。本公众号由<a class="col-link" href="http://c.biancheng.net/view/8092.html" target="_blank" rel="nofollow">C语言中文网站长</a>运营，每日更新，坚持原创，敢说真话，凡事有态度。</p>
	<p style="margin-top:12px; text-align:center;">
		<img width="180" src="./13.10Java利用对象序列化控制输入输出_files/qrcode_weixueyuan_original.png" alt="魏雪原二维码"><br>
		<span class="col-green">微信扫描二维码关注公众号</span>
	</p>
</div>
<!-- <p>关注微信公众号「魏雪原」，跟着<a class="col-link" href="/view/8092.html" target="_blank">站长</a>一起学习，拒绝躺平，跳出内卷，用知识完成阶级跃升：</p>
	<ul>
		<li>每日更新，坚持原创，敢说真话，凡事有态度。</li>
		<li>编程+求职+创业+营销，既有硬知识，也有软技能。</li>
		<li>手机端阅读教程，随时随地都能学习。</li>
		<li>即将绑定网站部分功能，包括注册登录、找回密码、获取下载链接等。</li>
	</ul> -->
			<div class="pre-next-page clearfix">
                    <span class="pre left"><span class="icon">&lt;</span> <span class="text-brief text-brief-pre">上一页</span><a href="http://c.biancheng.net/view/6966.html">Java转换流</a></span>
                    <span class="next right"><a href="http://c.biancheng.net/view/1153.html">Java保存图书信息</a><span class="text-brief text-brief-next">下一页</span> <span class="icon">&gt;</span></span>
                </div>
			<div id="ad-arc-bottom"></div>

<!-- <div id="ad-bottom-weixin" class="clearfix">
	<div class="left" style="width: 535px;">
		<p><span class="col-red">编程帮</span>，一个分享编程知识的公众号。跟着<a class="col-link" href="/cpp/about/author/" target="_blank">站长</a>一起学习，每天都有进步。</p>
		<p>通俗易懂，深入浅出，一篇文章只讲一个知识点。</p>
		<p>文章不深奥，不需要钻研，在公交、在地铁、在厕所都可以阅读，随时随地涨姿势。</p>
		<p>文章不涉及代码，不烧脑细胞，人人都可以学习。</p>
		<p>当你决定关注「编程帮」，你已然超越了90%的程序员！</p>
	</div>
	<div class="right" style="width: 150px;">
		<img width="150" src="/templets/new/images/erweima_biancheng.gif?v=1.6.72" alt="编程帮二维码" /><br />
		<span class="col-green">微信扫描二维码关注</span>
	</div>
</div> -->

<div id="nice-arcs" class="box-bottom">
	<h4>优秀文章</h4>
	<ul class="clearfix">
<li><a href="http://c.biancheng.net/view/23.html" title="Go语言常量和const关键字">Go语言常量和const关键字</a></li>
<li><a href="http://c.biancheng.net/linux/paste.html" title="paste">paste</a></li>
<li><a href="http://c.biancheng.net/view/831.html" title="Linux yum源码包安装和卸载过程详解版">Linux yum源码包安装和卸载过程详解版</a></li>
<li><a href="http://c.biancheng.net/view/2195.html" title="C++变量的定义位置">C++变量的定义位置</a></li>
<li><a href="http://c.biancheng.net/view/3165.html" title="Bluetooth（蓝牙）是什么？">Bluetooth（蓝牙）是什么？</a></li>
<li><a href="http://c.biancheng.net/view/5505.html" title="JS if else语句：条件判断语句">JS if else语句：条件判断语句</a></li>
<li><a href="http://c.biancheng.net/view/6112.html" title="第一个PHP程序">第一个PHP程序</a></li>
<li><a href="http://c.biancheng.net/view/6757.html" title="大数据流式计算框架汇总和对比">大数据流式计算框架汇总和对比</a></li>
<li><a href="http://c.biancheng.net/view/8180.html" title="JS定时器实现图片轮播">JS定时器实现图片轮播</a></li>
<li><a href="http://c.biancheng.net/thread/vip_8620.html" title="线程属性有哪些，如何自定义线程属性？">线程属性有哪些，如何自定义线程属性？</a></li>
</ul>
</div>
		</div>
		
	</div>
</div>
<script type="text/javascript">
// 当前文章ID
window.arcIdRaw = 'a_' + 7088;
window.arcId = "c228qdQqOCQORnFegLedF9tSzXoFrEhk6r5Tu4oK2kxMcjzIZERpf1iXTG8";
window.typeidChain = "109|79";
</script>
<div id="footer" class="clearfix">
	<div class="info left">
	<p>精美而实用的网站，分享优质编程教程，帮助有志青年。千锤百炼，只为大作；精益求精，处处斟酌；这种教程，看一眼就倾心。</p>
	<p>
		<a href="http://c.biancheng.net/view/8066.html" target="_blank" rel="nofollow">关于网站</a> <span>|</span>
		<a href="http://c.biancheng.net/view/8092.html" target="_blank" rel="nofollow">关于站长</a> <span>|</span>
		<a href="http://c.biancheng.net/view/8097.html" target="_blank" rel="nofollow">如何完成一部教程</a> <span>|</span>
		<a href="http://c.biancheng.net/view/8093.html" target="_blank" rel="nofollow">联系我们</a> <span>|</span>
		<a href="http://c.biancheng.net/sitemap/" target="_blank" rel="nofollow">网站地图</a>
	</p>
	<p>Copyright ©2012-2021 biancheng.net, <a href="http://www.beian.miit.gov.cn/" target="_blank" rel="nofollow" style="color:#666;">陕ICP备15000209号</a></p>
	</div>
	<img class="right" src="./13.10Java利用对象序列化控制输入输出_files/logo_bottom.gif" alt="底部Logo">
	<span id="return-top"><b>↑</b></span>
</div>

<script type="text/javascript">
window.siteId = 4;
window.cmsTemplets = "/templets/new";
window.cmsTempletsVer = "1.6.72";
</script>

<script src="./13.10Java利用对象序列化控制输入输出_files/jquery1.12.4.min.js.下载"></script>
<script src="./13.10Java利用对象序列化控制输入输出_files/common.js.下载"></script>
<span style="display:none;"><script src="./13.10Java利用对象序列化控制输入输出_files/z_stat.php" type="text/javascript" defer="defer" async="async"></script></span>

</body></html>